package com.example.aiinterview.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;


@Component
@Slf4j // 统一使用SLF4J日志
public class DatabaseTestConfig implements CommandLineRunner {

    private final JdbcTemplate jdbcTemplate;

    // 使用构造器注入，更推荐的方式
    public DatabaseTestConfig(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void run(String... args) throws Exception {
        log.info("开始执行数据库健康检查...");

        try {
            jdbcTemplate.queryForObject("SELECT 1", String.class);
            log.info("✅ 数据库连接成功");
        } catch (Exception e) {
            log.error("❌ 数据库连接失败", e);
            return; // 如果连接失败，则不再检查表
        }

        // 定义需要检查的关键表
        List<String> tablesToCheck = Arrays.asList("users", "interviews", "chat_messages");

        for (String tableName : tablesToCheck) {
            checkTableExists(tableName);
        }

        log.info("数据库健康检查完成。");
    }

    private void checkTableExists(String tableName) {
        try {
            // 使用信息模式查询，更通用的方式
            String sql = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = UPPER(?)";
            Integer count = jdbcTemplate.queryForObject(sql, Integer.class, tableName.toUpperCase());

            if (count != null && count > 0) {
                log.info("✅ 表 '{}' 存在", tableName);
            } else {
                log.warn("⚠️ 表 '{}' 不存在", tableName);
            }
        } catch (Exception e) {
            log.error("❌ 检查表 '{}' 时发生错误", tableName, e);
        }
    }
}